home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 147 / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin / tools / ask / source_ / keepchk2.s < prev    next >
Text File  |  1999-05-31  |  2KB  |  98 lines

  1. * 指定プログラムが常駐しているかどうか調べる
  2. * 途中まで識別子チェック版
  3. *        Oh!X 1992/3    p68+改良
  4.  
  5.     .include    doscall.mac
  6.     .include    pspdef.mac
  7. *
  8.     .xdef    keepchk2
  9. *
  10.     .text
  11.     .even
  12. *
  13. keepchk2:
  14. *
  15. *入力
  16. *    4(sp).l    自分自身のメモリ管理ポインタ
  17. *    8(sp).l    プログラム先頭から識別文字までのバイト数
  18. *    識別子は0までを比較する。
  19. *    比較しようとする識別子は常駐しているもののそれより短いこと
  20. *出力
  21. *    d0.b    常駐しているかどうか
  22. *        =  0 ... 常駐していない
  23. *        = -1 ... 常駐している
  24. *    d1.b    Human68kから直接起動されたかどうか
  25. *        =  0 ... command.xなどから起動
  26. *        = -1 ... Human68kから直接起動
  27. *    a0    メモリ管理ポインタ
  28. *        d0.b =  0 ... 自分自身のメモリポインタ
  29. *        d0.b = -1 ... 見つけた常駐プロセスのメモリポインタ
  30. MYMP    =    4+4*3+4*4    * sp,d2-d4/a1-a4
  31.     movem.l    d2-d4/a1-a4,-(sp)
  32.  
  33.     movem.l    MYMP(sp),a0/a4        * a0=メモリーポインタ , a4=識別子オフセット
  34.     move.l    a0,d4            * 保存
  35.  
  36.     lea.l    PSPSIZ(a4),a4
  37.     lea.l    0(a0,a4.l),a1        * 識別子アドレス
  38.  
  39.     movea.l    a1,a2
  40.     moveq.l    #-1,d3
  41. @@:    addq.w    #1,d3
  42.     tst.b    (a2)+
  43.     bne    @b            * d3.w=識別子の長さ
  44.  
  45.     clr.l    -(sp)
  46.     DOS    _SUPER
  47.     move.l    d0,(sp)
  48.  
  49.     movea.l    MOTHER(a0),a0
  50.     move.l    MOTHER(a0),d0
  51.     seq.b    d1
  52.     beq    chk0
  53.  
  54. chklp0:    movea.l    d0,a0
  55.     move.l    MOTHER(a0),d0
  56.     bne    chklp0
  57.  
  58. chk0:    moveq.l    #-1,d2
  59.  
  60. chklp1:    cmp.b    KEEPFLAG(a0),d2
  61.     bne    chknx1
  62.  
  63.     lea.l    0(a0,a4.l),a2
  64.     adda.w    d3,a2
  65.  
  66.     cmpa.l    MEMEND(a0),a2
  67.     bcc    chknx1
  68.  
  69.     suba.w    d3,a2
  70.     movea.l    a1,a3            * a1=これを呼び出したプログラム内の識別子
  71.     move.w    d3,d0
  72. @@:    cmpm.b    (a3)+,(a2)+
  73.     dbne    d0,@b
  74.     beq    found
  75.     tst.b    -1(a3)
  76.     beq    found            * 不一致が0によるなら一致とみなす
  77.  
  78. chknx1:    move.l    NEXTMEM(a0),d0
  79.     bne    ok
  80. nfound:    movea.l    d4,a0
  81.     bra    done
  82.  
  83. ok:    movea.l    d0,a0
  84.     bra    chklp1
  85.  
  86. found:    moveq.l    #0,d2
  87. done:    tst.b    (sp)
  88.     bmi    skip
  89.     DOS    _SUPER
  90. skip:    addq.w    #4,sp
  91.     tst.b    d2
  92.     seq.b    d0
  93.  
  94.     movem.l    (sp)+,d2-d4/a1-a4
  95.     rts
  96. *
  97.     .end
  98.